#ifndef _FACTORY_H_
#define _FACTORY_H_

class Product;
class Factory
{
public:
    virtual ~Factory() = 0;
    virtual Product* CreateProduct() = 0;
protected:
    Factory();
}; // Factory

class ConcreteFactory : public Factory
{
public:
    ConcreteFactory();
    ~ConcreteFactory();
    Product* CreateProduct();
}; // ConcreteFactory;


#endif // _FACTORY_H_